package com.kevin.design.behavioralPattern.templateMethod;


/**
 * @Description 创建型设计模式-模板方法
 * @Author Kevin
 * @Date: Created in  17:30 2019/9/2:
 * @Modified By:
 * @Email: tang.lx@topcheer.com
 */
public class TemplateMethodTest {

    // 模板方法 final修饰，确保方法不能被重写
    public final void template(String something){
        System.out.println("before");
        mid(something);
        System.out.println("after");
    }
    // 准备一个空方法，用来被重写
    protected void mid(String something) {
    }

    public static void main(String[] args) {
        // 仅重写空方法就可以了
        new TemplateMethodTest(){
            @Override
            protected void mid(String something) {
                System.out.println(something);
            }
        }.template("fuck");
    }
}

// 知识点
//1.运用：1）线程的run和start方法就是模板方法模式运用的结果
//        2）httpServlet 中的service方法
//2.解决何种问题:让父类控制子类方法的调用顺序
//3.模式好处:开发人员在开发时，只需要考虑方法的实现。不需要考虑方法在何种情况下被调用。实现代码复用。
//4.模式适合场景:
//      一次性实现一个算法的不变部分，并将可变的行为留给子类来实现。dealBidEndDate
//      各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
//      需要通过子类来决定父类算法中某个步骤是否执行，实现子类对父类的反向控制。
//
